package lexico;

import TablaDeSimbolos.TablaSimbolos;
import java.io.*;
import java.util.ArrayList;
import Tipos.*;

public class MainScanner{
    
    public Liner analizador;
    private GestorErrores gestor = new GestorErrores();
    private TablaSimbolos tabla = new TablaSimbolos(null);
    
    public MainScanner(){
        
    }
    
    public MainScanner(String ruta,GestorErrores gestor){
        try{
        	// this.analizador=new Scanner(ruta,gestor,tabla,null);
        	this.analizador=new Liner(ruta,gestor,tabla);
        }
        catch(IOException x){
            
        }
        catch(Exception x){
            
        }
    }
    
    static private double convertirDouble(String numero){
    int parteEntera=0;
    double parteDecimal=0;
    int exponente=0;
    int base=10;
    double pesoDecimal=1.0/(double)base;
    Integer digito;
    boolean signoPosi=true;
    int i=0;
    /*Hasta el punto o hasta que acabe*/
    for(i=0;i<numero.length() && isDigit(numero.charAt(i));i++){
        digito=new Integer(Integer.parseInt(numero.substring(i,i+1)));
        parteEntera=base*parteEntera+digito;
    }
    if(numero.charAt(i)=='.')
        i++;
    
    /*Hasta la e o hasta que acabe*/
    for(;i<numero.length() && numero.charAt(i)!='e';i++){
        digito=new Integer(Integer.parseInt(numero.substring(i,i+1)));
        parteDecimal=parteDecimal+digito*pesoDecimal;
        pesoDecimal=pesoDecimal/(double)base;
    }

    if(i<numero.length() && numero.charAt(i)=='e'){
        i++;
        if(numero.charAt(i)=='+'){
            signoPosi=true;
            i++;
        }
        else if(numero.charAt(i)=='-'){
            signoPosi=false;
            i++;
        }
        for(;i<numero.length();i++){
            digito=new Integer(Integer.parseInt(numero.substring(i,i+1)));
            exponente=base*exponente+digito;
        }
        if(signoPosi==false)
            exponente=exponente*(-1);
    }
    return(((double)parteEntera+parteDecimal)*java.lang.Math.pow(base,exponente));
}
    public static boolean isDigit(char cara){
        return (cara=='1' || cara=='2' || cara=='3' || cara=='4' || cara=='5' 
                || cara=='6' || cara=='7' || cara=='8' || cara=='9' || cara=='0');
    }
    
    public static void main(String[] args){
        GestorErrores gestor=new GestorErrores();
        ArrayList almacen=new ArrayList();
        MainScanner ana=new MainScanner("C:\\workspace\\Compilador0809\\src\\pruebas\\p1.txt",gestor);
        Token token=new Token(new TipoToken(TipoToken.tipoToken.CADENA),"hola",0,0);
        while (token.getTipo().getTipo().compareToIgnoreCase(TipoToken.tipoToken.FINFICHERO.toString())!=0){
            try{
            Token token1=ana.analizador.yylex();
            token=new Token(token1.getTipo(),token1.getAtributo(),token.getLinea(),token.getColumna());
            almacen.add(token);
            System.out.print(token.getTipo().getTipo()+" -->  ");
            System.out.println(token.getAtributo());
            
            }
            catch(IOException x){
                
            }
        }
        System.out.println("\n\n\n\n\n");
        gestor.mostrarErrores();
        System.out.println("hemos terminado");
    }
}